package com.cms.recursoshumanos.activity.vacaciones;

import java.util.Calendar;
import java.util.Date;

import com.cms.recursoshumanos.activity.main.MainRecursosHumanosActivity;
import com.cms.recursoshumanos.cache.UserInfoCache;
import com.cms.recursoshumanos.component.dialog.CustomCantidadDiaDialog;
import com.cms.recursoshumanos.component.dialog.CustomCantidadDiaDialog.CantidadDialogListener;
import com.cms.recursoshumanos.component.dialog.CustomDatePickerDialog;
import com.cms.recursoshumanos.component.dialog.CustomDatePickerDialog.DateDialogListener;
import com.cms.recursoshumanos.constant.Constant;
import com.cms.recursoshumanos.handler.VacacionesMainActivityHandler;
import com.cms.recursoshumanos.object.Usuario;
import com.cms.recursoshumanos.utilities.Tool;
import com.example.frontendrecursoshumanos.R;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.ProgressDialog;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class PlanillaVacacionesActivity extends MainRecursosHumanosActivity 
{

	private getPlanillaAsync asyncPlanillaTask;
	private Usuario elUsuario;
	private ProgressDialog dialog;
	private TextView textViewDias;
	private TextView textViewFechaInic;
	private TextView textViewFechaTope;
	
	private Date fecha_inic_seleccionada;
	private Date fecha_tope_seleccionada;
	private int cantidad_seleccionada;
	private Date min_date_value;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_planilla_vacaciones);
		elUsuario = UserInfoCache.getInstance().getUsuario();
		setComponents();
	}
	@Override
	protected void onResume() 
	{
		super.onResume();
		if (elUsuario == null)
		{
			elUsuario = UserInfoCache.getInstance().getUsuario();
		}
	}

	
	public void setComponents()
	{
		Calendar c_hoy = Calendar.getInstance();
		this.min_date_value = getFechaMinVacacion(c_hoy.getTime());
		LinearLayout layout_info_general = (LinearLayout) findViewById(R.id.llInformacionGeneralPlanillaVacaciones);
		
		textViewDias = (TextView) layout_info_general.findViewById(R.id.tvValueDiasDisfrutar);
		textViewFechaInic = (TextView) layout_info_general.findViewById(R.id.tvValueFechaInicioPlanilla);
		textViewFechaTope = (TextView) layout_info_general.findViewById(R.id.tvValueFechaTopePlanilla);
		
		
		Calendar c1 = Calendar.getInstance();
		
		fecha_tope_seleccionada = c1.getTime();
		fecha_inic_seleccionada = getFechaMinVacacion(fecha_tope_seleccionada);
		
		textViewFechaInic.setText(Tool.getInstance().parseDateToString(fecha_inic_seleccionada, 6));
		textViewFechaTope.setText(Tool.getInstance().parseDateToString(fecha_tope_seleccionada, 6));
		
		cantidad_seleccionada = 1;
		textViewDias.setText(""+cantidad_seleccionada);
	}
	public Date getFechaMinVacacion(Date fecha_tope)
	{
		Calendar c1 = Calendar.getInstance();
		c1.setTime(fecha_tope);
		int cont = 0;
		while (cont < Constant.MIN_CANTIDAD_DIA_TOPE_VACACIONES)
		{
			c1.add(Calendar.DAY_OF_YEAR, 1);
			if (c1.get(Calendar.DAY_OF_WEEK) > 1 && // si es Domingo(1) o es Sabado(7)
					c1.get(Calendar.DAY_OF_WEEK) < 7)
			{
				cont++;
			}
		}
		
		return c1.getTime();
	}
	public Date getFechaTope(Date fecha_inic)
	{
		Calendar c1 = Calendar.getInstance();
		c1.setTime(fecha_inic);
		int cont = 0;
		while (cont < Constant.MIN_CANTIDAD_DIA_TOPE_VACACIONES)
		{
			c1.add(Calendar.DAY_OF_YEAR, -1);
			if (c1.get(Calendar.DAY_OF_WEEK) > 1 && // si es Domingo(1) o es Sabado(7)
					c1.get(Calendar.DAY_OF_WEEK) < 7)
			{
				cont++;
			}
		}
		
		return c1.getTime();
	}
	public void onFechaInicClick(View v)
	{
		CustomDatePickerDialog mSpinnerDialog = new CustomDatePickerDialog(this, fecha_inic_seleccionada,min_date_value,new DateDialogListener() 
		{
			  public void cancelled() 
			  {
			    // do your code here
			  }
			  public void ready(Date fecha_selec) 
			  {
				  fecha_inic_seleccionada = fecha_selec;
				  fecha_tope_seleccionada = getFechaTope(fecha_selec);
				  textViewFechaInic.setText(Tool.getInstance().parseDateToString(fecha_inic_seleccionada, 6));
				  textViewFechaTope.setText(Tool.getInstance().parseDateToString(fecha_tope_seleccionada, 6));
				  
			  }
			});
		mSpinnerDialog.show();
	}

	public void onCantDiaClick(View v)
	{
		CustomCantidadDiaDialog dialog = new CustomCantidadDiaDialog(PlanillaVacacionesActivity.this, new CantidadDialogListener() 
		{
			
			@Override
			public void ready(int dia_select) 
			{
				cantidad_seleccionada = dia_select;
				textViewDias.setText(""+dia_select);
			}
			
			@Override
			public void cancelled() 
			{
				// TODO Auto-generated method stub
				
			}
		});
		dialog.show();
	}
	public boolean verificar_datos()
	{
		return true;
		
	}
	public void onEnviarSolicitudClick(View v)
	{
		
		this.getPlanillaVacaciones(fecha_inic_seleccionada,
											fecha_tope_seleccionada,
											cantidad_seleccionada);
		
	}
	public void getPlanillaVacaciones(Date fecha_inic, Date fecha_tope, int cantidad)
	{
		asyncPlanillaTask = new getPlanillaAsync(elUsuario,fecha_inic,fecha_tope,cantidad);
		asyncPlanillaTask.execute();
	}

	
	private class getPlanillaAsync extends AsyncTask<Integer, Void, String>
	{
		private Usuario elUsuario;
		private Date fecha_inic;
		private Date fecha_tope;
		private int cantidad;
		
		public  getPlanillaAsync(Usuario elUsuario, Date fecha_inic, Date fecha_tope, int cantidad)
	    {
			this.elUsuario = elUsuario;
			this.fecha_inic = fecha_inic;
			this.fecha_tope = fecha_tope;
			this.cantidad = cantidad;
	    }
		@SuppressWarnings("deprecation")
		@Override
		protected void onPreExecute()
		{
			showDialog(0);
			dialog = ProgressDialog.show(PlanillaVacacionesActivity.this, "Espere","Cargando...",true );
		}
	
		@Override
		protected String doInBackground(Integer... arg0) 
		{
			VacacionesMainActivityHandler handler = new VacacionesMainActivityHandler();
			String result = handler.getPlanillaVacaciones(this.elUsuario.getNombre_Usuario(),
															this.elUsuario.getPassword(),
															cantidad,
															fecha_inic,
															fecha_tope);
			return result;
		}
		
		@Override
		public void onPostExecute(String  result)
		{
			
			String str_result = result;
			
			if (str_result.equals(Constant.CODE_OK))
			{ 
				Toast.makeText(getAppContext(), "Se ha enviado la planilla de vacaciones a su correo satisfactoriamente", 
											Toast.LENGTH_LONG).show();
			}
			else 
			{
				Tool.getInstance().showMessage( str_result);
			}
			dialog.cancel();
			this.cancel(true);
			
			
		}
		
	}
	
}
